package xcmg.device.service.setting;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xcmg.device.dao.entity.setting.PrintTemplateDO;
import xcmg.device.dao.mapper.PrintTemplateMapper;
import xcmg.device.infra.ErrorCode;
import xcmg.device.service.vo.setting.PrintTemplateVO;
import yb.ecp.fast.feign.FastGenClient;
import yb.ecp.fast.infra.infra.ActionResult;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by sqq on 2018/2/3.
 */
@Service
public class PrintTemplateService {

    @Autowired
    private PrintTemplateMapper printTemplateMapper;

    @Autowired
    private FastGenClient fastGenClient;

    public List<PrintTemplateVO> list(PrintTemplateVO printTemplateVO){
        List<PrintTemplateDO> printTemplateDOList=printTemplateMapper.list(printTemplateVO);
        List<PrintTemplateVO> results=new ArrayList<>();
        for (PrintTemplateDO printTemplateDO: printTemplateDOList
             ) {
            PrintTemplateVO printTemplateVO1=new PrintTemplateVO();
            BeanUtils.copyProperties(printTemplateDO,printTemplateVO1);
            results.add(printTemplateVO1);
        }
        return results;
    }

    @Transactional
    public ErrorCode insert(PrintTemplateVO printTemplateVO){
        ActionResult<String> textResult=fastGenClient.textGuid();
        if(textResult.getCode()!= ErrorCode.Success.getCode()){
            return null;
        }
        printTemplateVO.setId(textResult.getValue());
        printTemplateVO.setCreateDate(new Date());
        printTemplateVO.setIsDel(false);
        PrintTemplateDO printTemplateDO= new PrintTemplateDO();
        BeanUtils.copyProperties(printTemplateVO,printTemplateDO);
        if(printTemplateDO.getIsDefault()==null){
            printTemplateDO.setIsDefault(false);
        }
        if(printTemplateDO.getIsDefault()){
            printTemplateMapper.clearDefault(printTemplateDO.getOrgId(),printTemplateDO.getTemplateType());
        }
        return printTemplateMapper.insert(printTemplateDO)>0?ErrorCode.Success:ErrorCode.Failure;
    }

    @Transactional
    public ErrorCode update(PrintTemplateVO printTemplateVO){
        if(printTemplateVO==null || printTemplateVO.getId()==null){
            return ErrorCode.IllegalArument;
        }
        PrintTemplateDO printTemplateDO=printTemplateMapper.item(printTemplateVO.getId());
        if(printTemplateDO==null){
            return ErrorCode.IllegalArument;
        }
        if(printTemplateVO.getIsDefault()){
            printTemplateMapper.clearDefault(printTemplateDO.getOrgId(),printTemplateDO.getTemplateType());
        }
        BeanUtils.copyProperties(printTemplateVO,printTemplateDO);
        return printTemplateMapper.update(printTemplateDO)>0?ErrorCode.Success:ErrorCode.Failure;
    }

    @Transactional
    public ErrorCode setDefault(String id){
        PrintTemplateDO printTemplateDO=printTemplateMapper.item(id);
        if(printTemplateDO==null){
            return ErrorCode.IllegalArument;
        }
        printTemplateMapper.clearDefault(printTemplateDO.getOrgId(),printTemplateDO.getTemplateType());
        printTemplateDO.setIsDefault(true);
        return printTemplateMapper.update(printTemplateDO)>0?ErrorCode.Success:ErrorCode.Failure;
    }

    public ErrorCode remove(String id){
        PrintTemplateDO printTemplateDO=printTemplateMapper.item(id);
        if(printTemplateDO==null || printTemplateDO.getIsDefault()){
            return ErrorCode.IllegalArument;
        }
        printTemplateDO.setIsDel(true);
        return printTemplateMapper.update(printTemplateDO)>0?ErrorCode.Success:ErrorCode.Failure;
    }

    public PrintTemplateVO item(String id){
        PrintTemplateDO printTemplateDO=printTemplateMapper.item(id);
        if(printTemplateDO==null){
            return null;
        }
        PrintTemplateVO printTemplateVO=new PrintTemplateVO();
        BeanUtils.copyProperties(printTemplateDO,printTemplateVO);
        return printTemplateVO;
    }

    public PrintTemplateVO defaultItem(String orgId,String templateType){
        PrintTemplateDO printTemplateDO=printTemplateMapper.defaultItem(orgId,templateType);
        if(printTemplateDO==null){
            return null;
        }
        PrintTemplateVO printTemplateVO=new PrintTemplateVO();
        BeanUtils.copyProperties(printTemplateDO,printTemplateVO);
        return printTemplateVO;
    }

}
